Programming languages have become more powerful over time through the addition of features and capabilities. The increased power and capability of languages has been accompanied by an increase in complexity. As software increases in complexity, the development of software is becoming more and more difficult. Source code may exceed hundreds of pages in length and may involve the use of many different source code files and programming libraries. The number and complexity of functions available to a software developer has greatly increased. For example, multiple functions or methods within a class hierarchy may share the same name (or identifier), but have different numbers of parameters or different parameter types. A large number of identifiers may be used, including typedefs, variables, macros, parameters, namespaces, templates, attributes and so on. Each of these identifiers typically requires a type declaration and/or definition specified. Hence programming tools that make development efforts easier and more accurate are widely desired.
One way to make the task of the developer more manageable is to establish an Integrated Development Environment (IDE). These environments typically include browsers and editors enabling developers to edit multiple source files. For object oriented languages, the IDE may also provide a browser that enables a developer to navigate and view the class hierarchy. To further assist the programming effort an IDE may support some kind of on-line statement building mechanism such as the one described in U.S. Pat. No. 6,311,323 B1 issued Oct. 30, 2001, entitled “Computer Programming Language Statement Building and Information Tool”. A help information mechanism may enable a developer to refer to on-line documentation describing varying function definitions. In addition, an IDE may provide automatic help modules displaying reference information associated with identifiers and so on, as described in U.S. patent application Ser. No. 09/191,757, filed Nov. 13, 1998, entitled “Automated Help Information for Reference Information”, now U.S. Pat. No. 6,502,233. A completion module for auto-completion of programming statements may also be available within the IDE, as described in U.S. Pat. No. 6,305,008 B1, issued Oct. 16, 2001 entitled, “Automatic Statement Completion”. Such a tool may be invoked as a developer is writing code, and may display a list of potential completion candidates to the developer. The developer may then pick the desired candidate or continue typing, freeing the developer from having to consult printed or on-line documentation, class hierarchies or other source code files.
To date however, a tool that can intelligently understand what the user (e.g., developer) is doing and help the user accomplish the next set of tasks is not known. It would be helpful if there were a tool that could track the intentions of a user and proffer up a list of options of potential next tasks, based on the user's action.